home *** CD-ROM | disk | FTP | other *** search
/ Visual Cafe 3 / Visual Cafe 3.ISO / Vcafe / JFC.bin / WindowsIconFactory.java < prev    next >
Text File  |  1998-06-30  |  13KB  |  425 lines

  1. /*
  2.  * @(#)WindowsIconFactory.java    1.5 98/02/02
  3.  * 
  4.  * Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved.
  5.  * 
  6.  * This software is the confidential and proprietary information of Sun
  7.  * Microsystems, Inc. ("Confidential Information").  You shall not
  8.  * disclose such Confidential Information and shall use it only in
  9.  * accordance with the terms of the license agreement you entered into
  10.  * with Sun.
  11.  * 
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  15.  * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
  16.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
  17.  * THIS SOFTWARE OR ITS DERIVATIVES.
  18.  * 
  19.  */
  20.  
  21. package com.sun.java.swing.plaf.windows;
  22.  
  23. import com.sun.java.swing.*;
  24. import com.sun.java.swing.plaf.UIResource;
  25. import com.sun.java.swing.plaf.basic.BasicGraphicsUtils;
  26.  
  27. import java.awt.Graphics;
  28. import java.awt.Color;
  29. import java.awt.Component;
  30. import java.awt.Polygon;
  31. import java.io.Serializable;
  32.  
  33. /**
  34.  * Factory object that can vend Icons appropriate for the Windows L & F.
  35.  * <p>
  36.  * Warning: serialized objects of this class will not be compatible with
  37.  * future swing releases.  The current serialization support is appropriate 
  38.  * for short term storage or RMI between Swing1.0 applications.  It will
  39.  * not be possible to load serialized Swing1.0 objects with future releases
  40.  * of Swing.  The JDK1.2 release of Swing will be the compatibility
  41.  * baseline for the serialized form of Swing objects.
  42.  *
  43.  * @version 1.7 12/08/97
  44.  * @author David Kloba
  45.  * @author Georges Saab
  46.  * @author Rich Schiavi
  47.  */
  48. public class WindowsIconFactory implements Serializable
  49. {
  50.     private static Icon frame_closeIcon;
  51.     private static Icon frame_iconifyIcon;
  52.     private static Icon frame_maxIcon;
  53.     private static Icon frame_minIcon;
  54.     private static Icon frame_resizeIcon;
  55.     private static Icon checkBoxIcon;
  56.     private static Icon radioButtonIcon;
  57.     private static Icon checkBoxMenuItemIcon;
  58.     private static Icon radioButtonMenuItemIcon;
  59.     private static Icon menuItemCheckIcon;
  60.     private static Icon menuItemArrowIcon;
  61.     private static Icon menuArrowIcon;
  62.  
  63.     public static Icon getMenuItemCheckIcon() {
  64.     if (menuItemCheckIcon == null) {
  65.         menuItemCheckIcon = new MenuItemCheckIcon();
  66.     }
  67.     return menuItemCheckIcon;
  68.     }
  69.  
  70.     public static Icon getMenuItemArrowIcon() {
  71.     if (menuItemArrowIcon == null) {
  72.         menuItemArrowIcon = new MenuItemArrowIcon();
  73.     }
  74.     return menuItemArrowIcon;
  75.     }
  76.  
  77.     public static Icon getMenuArrowIcon() {
  78.     if (menuArrowIcon == null) {
  79.         menuArrowIcon = new MenuArrowIcon();
  80.     }
  81.     return menuArrowIcon;
  82.     }
  83.  
  84.     public static Icon getCheckBoxIcon() {
  85.     if (checkBoxIcon == null) {
  86.         checkBoxIcon = new CheckBoxIcon();
  87.     }
  88.     return checkBoxIcon;
  89.     }
  90.  
  91.     public static Icon getRadioButtonIcon() {
  92.     if (radioButtonIcon == null) {
  93.         radioButtonIcon = new RadioButtonIcon();
  94.     }
  95.     return radioButtonIcon;
  96.     }
  97.  
  98.     public static Icon getCheckBoxMenuItemIcon() {
  99.     if (checkBoxMenuItemIcon == null) {
  100.         checkBoxMenuItemIcon = new CheckBoxMenuItemIcon();
  101.     }
  102.     return checkBoxMenuItemIcon;
  103.     }
  104.  
  105.     public static Icon getRadioButtonMenuItemIcon() {
  106.     if (radioButtonMenuItemIcon == null) {
  107.         radioButtonMenuItemIcon = new RadioButtonMenuItemIcon();
  108.     }
  109.     return radioButtonMenuItemIcon;
  110.     }
  111.  
  112.     public static Icon createFrameCloseIcon() {
  113.     if(frame_closeIcon == null)
  114.         frame_closeIcon = new CloseIcon();
  115.     return frame_closeIcon;
  116.     }
  117.  
  118.     public static Icon createFrameIconifyIcon() {
  119.     if(frame_iconifyIcon == null)
  120.         frame_iconifyIcon = new IconifyIcon();
  121.     return frame_iconifyIcon;
  122.     }
  123.  
  124.     public static Icon createFrameMaximizeIcon() {
  125.     if(frame_maxIcon == null)
  126.         frame_maxIcon = new MaximizeIcon();
  127.     return frame_maxIcon;
  128.     }
  129.  
  130.     public static Icon createFrameMinimizeIcon() {
  131.     if(frame_minIcon == null)
  132.         frame_minIcon = new MinimizeIcon();
  133.     return frame_minIcon;
  134.     }
  135.  
  136.     public static Icon createFrameResizeIcon() {
  137.     if(frame_resizeIcon == null)
  138.         frame_resizeIcon = new ResizeIcon();
  139.     return frame_resizeIcon;
  140.     }
  141.  
  142.  
  143.         private static class CloseIcon implements Icon, Serializable {
  144.             int height = 16;
  145.             int width = 14;
  146.             public void paintIcon(Component c, Graphics g, int x, int y) {
  147.                 g.setColor(Color.black);
  148.  
  149.                 g.drawLine(4, 3, 10, 9);
  150.                 g.drawLine(5, 3, 11, 9);
  151.  
  152.                 g.drawLine(10, 3, 4, 9);
  153.                 g.drawLine(11, 3, 5, 9);
  154.  
  155.             }
  156.             public int getIconWidth() { return width; }
  157.             public int getIconHeight() { return height; }
  158.         };
  159.  
  160.         private static class IconifyIcon implements Icon, Serializable {
  161.             int height = 16;
  162.             int width = 14;
  163.             public void paintIcon(Component c, Graphics g, int x, int y) {
  164.                 g.setColor(Color.black);
  165.                 g.drawRect(4, height - 7, 6, 1);
  166.             }
  167.             public int getIconWidth() { return width; }
  168.             public int getIconHeight() { return height; }
  169.         };
  170.  
  171.         private static class MaximizeIcon implements Icon, Serializable {
  172.             int height = 16;
  173.             int width = 14;
  174.             public void paintIcon(Component c, Graphics g, int x, int y) {
  175.                 g.setColor(Color.black);
  176.                 g.drawRect(3, 2, 8, 8);
  177.                 g.drawLine(3, 3, 11, 3);
  178.             }
  179.             public int getIconWidth() { return width; }
  180.             public int getIconHeight() { return height; }
  181.         };
  182.  
  183.         private static class MinimizeIcon implements Icon, Serializable {
  184.             int height = 16;
  185.             int width = 14;
  186.             public void paintIcon(Component c, Graphics g, int x, int y) {
  187.                 g.setColor(Color.black);
  188.                 g.drawRect(5, 2, 5, 5);
  189.                 g.drawLine(5, 3, 10, 3);
  190.  
  191.                 g.drawRect(3, 5, 5, 5);
  192.                 g.drawLine(3, 6, 7, 6);
  193.  
  194.                 g.setColor(BasicGraphicsUtils.control);
  195.                 g.fillRect(4, 7, 4, 3);
  196.             }
  197.             public int getIconWidth() { return width; }
  198.             public int getIconHeight() { return height; }
  199.         };
  200.  
  201.         private static class ResizeIcon implements Icon, Serializable {
  202.             public void paintIcon(Component c, Graphics g, int x, int y) {
  203.                 g.setColor(BasicGraphicsUtils.controlHighlight);
  204.                 g.drawLine(0, 11, 11, 0);
  205.                 g.drawLine(4, 11, 11, 4);
  206.                 g.drawLine(8, 11, 11, 8);
  207.  
  208.                 g.setColor(BasicGraphicsUtils.controlShadow);
  209.                 g.drawLine(1, 11, 11, 1);
  210.                 g.drawLine(2, 11, 11, 2);
  211.                 g.drawLine(5, 11, 11, 5);
  212.                 g.drawLine(6, 11, 11, 6);
  213.                 g.drawLine(9, 11, 11, 9);
  214.                 g.drawLine(10, 11, 11, 10);
  215.             }
  216.             public int getIconWidth() { return 13; }
  217.             public int getIconHeight() { return 13; }
  218.         };
  219.  
  220.     private static class CheckBoxIcon implements Icon, Serializable
  221.     {
  222.     final static int csize = 13;
  223.     public void paintIcon(Component c, Graphics g, int x, int y) {
  224.         AbstractButton b = (AbstractButton) c;
  225.         ButtonModel model = b.getModel();
  226.  
  227.         // outer bevel
  228.         g.setColor(BasicGraphicsUtils.control);
  229.         g.fill3DRect(x, y, csize, csize, false);
  230.         
  231.         // inner bevel
  232.         g.setColor(BasicGraphicsUtils.controlShadow);
  233.         g.fill3DRect(x+1, y+1, csize-2, csize-2, false);
  234.  
  235.         // inside box 
  236.         if((model.isPressed() && model.isArmed()) || !model.isEnabled()) {
  237.         g.setColor(BasicGraphicsUtils.control);
  238.         } else {
  239.         g.setColor(BasicGraphicsUtils.controlWhite);
  240.         }
  241.         g.fillRect(x+2, y+2, csize-4, csize-4);
  242.             
  243.         if(model.isEnabled()) {
  244.         g.setColor(BasicGraphicsUtils.controlBlack);
  245.         } else {
  246.         g.setColor(BasicGraphicsUtils.controlShadow);
  247.         }
  248.  
  249.         // paint check
  250.         if (model.isSelected()) {
  251.         g.drawLine(x+9, y+3, x+9, y+3);
  252.         g.drawLine(x+8, y+4, x+9, y+4);
  253.         g.drawLine(x+7, y+5, x+9, y+5);
  254.         g.drawLine(x+6, y+6, x+8, y+6);
  255.         g.drawLine(x+3, y+7, x+7, y+7);
  256.         g.drawLine(x+4, y+8, x+6, y+8);
  257.         g.drawLine(x+5, y+9, x+5, y+9);
  258.         g.drawLine(x+3, y+5, x+3, y+5);
  259.         g.drawLine(x+3, y+6, x+4, y+6);
  260.         }
  261.     }
  262.  
  263.     public int getIconWidth() {
  264.         return csize;
  265.     }
  266.         
  267.     public int getIconHeight() {
  268.         return csize;
  269.     }
  270.     }
  271.  
  272.     private static class RadioButtonIcon implements Icon, UIResource, Serializable
  273.     {
  274.     public void paintIcon(Component c, Graphics g, int x, int y) {
  275.         AbstractButton b = (AbstractButton) c;
  276.         ButtonModel model = b.getModel();
  277.  
  278.         // fill interior
  279.         if((model.isPressed() && model.isArmed()) || !model.isEnabled()) {
  280.         g.setColor(BasicGraphicsUtils.control);
  281.         } else {
  282.         g.setColor(BasicGraphicsUtils.controlWhite);
  283.         }
  284.         g.fillRect(x+2, y+2, 8, 8);
  285.         
  286.         
  287.         // outter left arc
  288.         g.setColor(BasicGraphicsUtils.controlShadow);
  289.         g.drawLine(x+4, y+0, x+7, y+0);
  290.         g.drawLine(x+2, y+1, x+3, y+1);
  291.         g.drawLine(x+8, y+1, x+9, y+1);
  292.         g.drawLine(x+1, y+2, x+1, y+3);
  293.         g.drawLine(x+0, y+4, x+0, y+7);
  294.         g.drawLine(x+1, y+8, x+1, y+9);
  295.  
  296.         // outter right arc
  297.         g.setColor(BasicGraphicsUtils.controlHighlight);
  298.         g.drawLine(x+2, y+10, x+3, y+10);
  299.         g.drawLine(x+4, y+11, x+7, y+11);
  300.         g.drawLine(x+8, y+10, x+9, y+10);
  301.         g.drawLine(x+10, y+9, x+10, y+8);
  302.         g.drawLine(x+11, y+7, x+11, y+4);
  303.         g.drawLine(x+10, y+3, x+10, y+2);
  304.  
  305.  
  306.         // inner left arc
  307.         g.setColor(BasicGraphicsUtils.controlBlack);
  308.         g.drawLine(x+4, y+1, x+7, y+1);
  309.         g.drawLine(x+2, y+2, x+3, y+2);
  310.         g.drawLine(x+8, y+2, x+9, y+2);
  311.         g.drawLine(x+2, y+3, x+2, y+3);
  312.         g.drawLine(x+1, y+4, x+1, y+7);
  313.         g.drawLine(x+2, y+8, x+2, y+8);
  314.  
  315.  
  316.         // inner right arc
  317.         g.setColor(BasicGraphicsUtils.control);
  318.         g.drawLine(x+2,  y+9,  x+3,  y+9);
  319.         g.drawLine(x+4,  y+10, x+7,  y+10);
  320.         g.drawLine(x+8,  y+9,  x+9,  y+9);
  321.         g.drawLine(x+9,  y+8,  x+9,  y+8);
  322.         g.drawLine(x+10, y+7,  x+10, y+4);
  323.         g.drawLine(x+9,  y+3,  x+9,  y+3);
  324.  
  325.  
  326.         // indicate whether selected or not
  327.         if(model.isSelected()) {
  328.         g.setColor(BasicGraphicsUtils.controlBlack);
  329.         g.fillRect(x+4, y+5, 4, 2);
  330.         g.fillRect(x+5, y+4, 2, 4);
  331.         } 
  332.     }
  333.  
  334.     public int getIconWidth() {
  335.         return 13;
  336.     }
  337.         
  338.     public int getIconHeight() {
  339.         return 13;
  340.     }
  341.     } // end class RadioButtonIcon
  342.  
  343.  
  344.     private static class CheckBoxMenuItemIcon implements Icon, UIResource, Serializable
  345.     {
  346.     public void paintIcon(Component c, Graphics g, int x, int y) {
  347.         AbstractButton b = (AbstractButton) c;
  348.         ButtonModel model = b.getModel();
  349.         boolean isSelected = model.isSelected();
  350.         if (isSelected) {
  351.         y = y - getIconHeight() / 2;
  352.         g.drawLine(x+9, y+3, x+9, y+3);
  353.         g.drawLine(x+8, y+4, x+9, y+4);
  354.         g.drawLine(x+7, y+5, x+9, y+5);
  355.         g.drawLine(x+6, y+6, x+8, y+6);
  356.         g.drawLine(x+3, y+7, x+7, y+7);
  357.         g.drawLine(x+4, y+8, x+6, y+8);
  358.         g.drawLine(x+5, y+9, x+5, y+9);
  359.         g.drawLine(x+3, y+5, x+3, y+5);
  360.         g.drawLine(x+3, y+6, x+4, y+6);
  361.         }
  362.     }
  363.     public int getIconWidth() { return 9; }
  364.     public int getIconHeight() { return 9; }
  365.  
  366.     } // End class CheckBoxMenuItemIcon
  367.  
  368.     
  369.     private static class RadioButtonMenuItemIcon implements Icon, UIResource, Serializable
  370.     {
  371.     public void paintIcon(Component c, Graphics g, int x, int y) {
  372.         AbstractButton b = (AbstractButton) c;
  373.         ButtonModel model = b.getModel();
  374.         if (b.isSelected() == true) {
  375.         g.fillArc(0,0,getIconWidth()-2, getIconHeight()-2, 0, 360);
  376.         }
  377.     }
  378.     public int getIconWidth() { return 12; }
  379.     public int getIconHeight() { return 12; }
  380.  
  381.     } // End class RadioButtonMenuItemIcon
  382.  
  383.  
  384.     private static class MenuItemCheckIcon implements Icon, UIResource, Serializable{
  385.     public void paintIcon(Component c, Graphics g, int x, int y) {
  386.         /* For debugging:
  387.            Color oldColor = g.getColor();
  388.         g.setColor(Color.orange);
  389.         g.fill3DRect(x,y,getIconWidth(), getIconHeight(), true);
  390.         g.setColor(oldColor);
  391.         */
  392.     }
  393.     public int getIconWidth() { return 9; }
  394.     public int getIconHeight() { return 9; }
  395.  
  396.     } // End class MenuItemCheckIcon
  397.  
  398.     private static class MenuItemArrowIcon implements Icon, UIResource, Serializable {
  399.     public void paintIcon(Component c, Graphics g, int x, int y) {
  400.         /* For debugging:
  401.         Color oldColor = g.getColor();
  402.         g.setColor(Color.green);
  403.         g.fill3DRect(x,y,getIconWidth(), getIconHeight(), true);
  404.         g.setColor(oldColor);
  405.         */
  406.     }
  407.     public int getIconWidth() { return 4; }
  408.     public int getIconHeight() { return 8; }
  409.  
  410.     } // End class MenuItemArrowIcon
  411.  
  412.     private static class MenuArrowIcon implements Icon, UIResource, Serializable {
  413.     public void paintIcon(Component c, Graphics g, int x, int y) {
  414.         Polygon p = new Polygon();
  415.         p.addPoint(x, y);
  416.         p.addPoint(x+getIconWidth(), y+getIconHeight()/2);
  417.         p.addPoint(x, y+getIconHeight());
  418.         g.fillPolygon(p);
  419.     }
  420.     public int getIconWidth() { return 4; }
  421.     public int getIconHeight() { return 8; }
  422.     } // End class MenuArrowIcon
  423. }
  424.  
  425.